\section{Motivation}

\subsection{Hot Code Deployment}

\begin{frame}
  \frametitle{Aufgabenstellung: Hot Code Deployment}
  
  \includegraphics[width=\textwidth]{Bilder/Motivation}
\end{frame}

\section{Technologien}

\subsection{Java RMI}

\begin{frame}
	\frametitle{Remote Method Invocation}
	
	\begin{itemize}
		\item Java Implementierung des Remote Procedure Call (RPC)
		\item Aufruf entfernter Java-Objekte
		\item Stub täuscht Client normales Java-Objekt vor (Transparenz)
		\item tatsächliches Objekt liegt auf Server
		\item rmiregistry dient als Namensdienst und verwaltet entfernte Objekte
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{Remote Method Invocation}
	
	\begin{center}
		\includegraphics[width=8cm]{Bilder/RMISchema}
	\end{center}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Remote Method Invocation}
	
	Komponenten:
	\begin{itemize}
		\item Remote Interface
  		\begin{lstlisting}
			public interface RmiServerIntf extends Remote {
			    public String getMessage() throws RemoteException;
			}
 		\end{lstlisting}
 		\begin{itemize}
			\item definiert Schnittstelle für Client und wird von Server implementiert
 		\end{itemize}
		\item Remote Object
  		\begin{lstlisting}
  			public class RmiServer extends UnicastRemoteObject 
  				implements RmiServerIntf { ... }
 		\end{lstlisting}
 		\begin{itemize}
			\item implementiert das Interface
 		\end{itemize}
		\item Remote Reference
		\begin{lstlisting}
			ref = (RmiServerIntf) Naming.lookup("//194.23.1.21/RmiServer");
		\end{lstlisting}
 		\begin{itemize}
			\item referenziert das Remote Object
			\item erhält der Client von der Registry
 		\end{itemize}
	\end{itemize}
\end{frame}

\subsection{rmiio}

\begin{frame}[fragile]
  \frametitle{rmiio}
  
  \begin{itemize}
	\item Bibliothek zum Streaming von Daten über RMI
	\item einfaches Interface
	\item kümmert sich um Speicherverwaltung beim Übertragen
  \end{itemize}
  \begin{lstlisting}[caption=UploadService (Server)]{Name}
	public class RemoteFileUploadService {
	  public void uploadFile(String fileName, RemoteInputStream ris) {
	    InputStream fileData = RemoteInputStreamClient.wrap(ris);
	  }
	}
  \end{lstlisting}
  \begin{lstlisting}[caption=Dateiupload (Client)]{Name}
	RemoteFileUploadService service = ...;
	InputStream fileData = ...;
	RemoteInputStreamServer remoteFileData = 
            new SimpleRemoteInputStream(fileData);
	service.uploadFile("MyFile",remoteFileData.export());
  \end{lstlisting}
\end{frame}

\begin{frame}
	\frametitle{rmiio}
	\begin{center}
		\includegraphics[height=0.9\textheight]{Bilder/rmiiouml}
	\end{center}
\end{frame}

\subsection{PKI}

\begin{frame}
	\frametitle{PKI}
	
	\begin{itemize}
		\item Developer PC erhält Möglichkeit, Code auf Testclients zu laden und auszuführen
		\item großes Sicherheitsrisiko bei fremden Zugriff
		\item daher wichtig: Authentifizierung!
		\item mögliche Lösung: Zertifikate / einfache PKI
		\item sichere Datenübertragung per SSL
		
	\end{itemize}
\end{frame}